package page;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.server.handler.SendKeys;

import java.util.HashMap;

/**
 * 通讯录页面，部门管理、成员管理、标签管理
 */
public class ContactPage extends BasePage {

    /**
     * 元素定位：添加成员-姓名
     */
    By BY_USERNAME = By.name("username");
    /**
     * 元素定位：添加成员-账号
     */
    By BY_ACCTID = By.name("acctid");
    /**
     * 元素定位：添加成员-手机号
     */
    By BY_MOBILE = By.name("mobile");

    /**
     * 元素定位：添加成员-保存
     */
    By BY_SAVEUSER = By.linkText("保存");

    public ContactPage(WebDriver driver) {
        super(driver);
    }

    /**
     * 添加成员
     *
     * @param name    姓名
     * @param account 账号（成员唯一标识，设置后不支持修改）
     * @param mobile  手机
     * @param data    其他字段数据对象
     * @return
     */
    public ContactPage add(String name, String account, String mobile, HashMap<String, String> data) {

//        driver.findElement(By.name("username")).sendKeys(name);
        sendKeys(BY_USERNAME, name);
//        driver.findElement(By.name("acctid")).sendKeys(account);
        sendKeys(BY_ACCTID, account);
//        driver.findElement(By.name("mobile")).sendKeys(mobile);
        sendKeys(By.name("mobile"), mobile);

//        driver.findElement(By.linkText("保存")).click();
        click(BY_SAVEUSER);

        return this;

    }

    public void addWithFail() {

    }


    public void delete() {

    }

    public ContactPage search(String accountId) {
        driver.findElement(By.id("memberSearchInput")).sendKeys(accountId);
        return this;

    }

    public void importMember() {

    }

    public void exportMember() {

    }

    public String getMember() {
        String name = driver.findElement(By.cssSelector(".member_display_cover_detail_name")).getText();
        return name;
    }


    // -------------------- 部门管理
    //TODO：部门允许同名，验证添加成功需要验证整个部门链路……
    //TODO：出于练习PO模式的目的，目前仅简单实现添加部门即可，不要强求不要强求，不要把自己逼死……

    /**
     * @param parentParty 父目录
     * @param partyName   子目录
     * @return
     */
    public ContactPage addParty(String parentParty, String partyName) {
        click(By.linkText("添加"));
        click(By.linkText("添加部门"));
        sendKeys(By.name("name"), partyName);
        click(By.linkText("选择所属部门"));
        driver.findElement(By.tagName("form")).findElement(By.linkText(parentParty)).click();
        click(By.linkText("确定"));
        return this;
    }

    /**
     * 查找指定部门
     *
     * @param partyName 要查找的部门名称
     * @return true：查找成功；false：查找失败
     */
    public boolean hasParty(String partyName) {
        boolean result = false;
        sendKeys(By.id("memberSearchInput"), partyName);
        try {
            int partyCount = driver.findElements(By.id("search_party_list")).size();
            if (partyCount > 0) {
                result = true;
            } else {
                System.out.println("查找的部门不存在");
            }
        } catch (Exception e) {
            System.out.println("查找的部门不存在");
        }finally {
            return  result;
        }
    }

    /**
     * @param tag 标签名
     * @return
     */
    public ContactPage addTag(String tag) {
        click(By.linkText("标签"));
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        click(By.linkText("添加"));
        sendKeys(By.name("name"), tag);
        //TODO 还没实现标签可使用人的选择
        click(By.linkText("确定"));
        return this;
    }

    /**
     * 查找指定部门
     *
     * @param tag 要查找的标签
     * @return true：查找成功；false：查找失败
     */
    public boolean hasTag(String tag) {
        boolean result = false;
        sendKeys(By.xpath("//input"), tag);
        try {
            int tagsCount = driver.findElements(By.xpath("//ul[@class='member_tag_list']")).size();
            if (tagsCount > 0) {
                result = true;
            } else {
                System.out.println("查找的标签不存在");
            }
        } catch (Exception e) {
            System.out.println("查找的标签不存在");
        }finally {
            return  result;
        }
    }

}
